Storage systems have storage disks from which data is read or to which data is written, and a storage processor that performs read and write operations in response to receiving read and write requests, respectively. Typically, the storage processor in such a system has multiple cores, as well as memory that stores instructions and data used in carrying out the requests. Furthermore, the system itself has a storage cache that stores frequently accessed data.
In conventional storage systems, the storage processor carries out a task from each request through to completion using a single execution thread. For example, upon receiving a request from a host to read data from storage, the storage processor places the request in a queue of a core and begins processing the request. To carry out the request, the thread initially accesses a working set of instructions for checking whether the requested data is stored in the storage cache. When there is a storage cache miss, the thread accesses further instructions from the working set for translating a logical address of the requested data to a physical address on disk. Upon receiving the physical address, the thread accesses instructions from the working set for retrieving the data from the physical location in disk. Finally, to complete the task, the thread returns the data to the requesting host.